|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(*~\Глагол\Отделы\Иное~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) (**) ОТДЕЛ Буква; (*============================================================================*) (* НАЗНАЧЕНИЕ: распознавание и преобразование букв *) (*============================================================================*) ПОСТ (* номера допустимых азбук *) русскаяАзбука = 0; украинскаяАзбука = 1; белорусскаяАзбука = 2; дореформеннаяАзбука = 3; латинскаяАзбука = 4; (* известные буквы - буквы из азбучных цепочек в допустимых азбуках *) (* 0 *) русскиеЗаглавные = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; русскиеСтрочные = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; (* 1 *) украинскиеЗаглавные = "АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯʼ"; украинскиеСтрочные = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя’"; (* 2 *) белорусскиеЗаглавные = "АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШЫЬЭЮЯʼ"; белорусскиеСтрочные = "абвгдеёжзійклмнопрстуўфхцчшыьэюя’"; (* 3 *) дореформенныеЗаглавные = "АБВГДЕЁЖЗИІЙКЛМНОПРСТУФХЦЧШЩЪЫЬѢЭЮЯ#0472#0474"; дореформенныеСтрочные = "абвгдеёжзиійклмнопрстуфхцчшщъыьѣэюя#0473#0475"; (* 4 *) латинскиеЗаглавные = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; латинскиеСтрочные = "abcdefghijklmnopqrstuvwxyz"; (* сюда ещё бы добавить греческую азбуку! *) ВИД (* вид "ПризнакиИзвестнойБуквы" - набор параметров принадлежности переменной вида ЗНАК к одной из допустимых азбучных цепочек *) Вид = НАБОР азбуки:МНОЖ;(* множество допустимых азбук с этой буквой: {0}/{1}/{2}/{3}/{4} *) заглавная,строчная:ЗНАК; (* пара букв из азбучных цепочек *) КОН; (* глобальные переменные для задач отдела Буква, не видные в других отделах *) ПЕР рПризнакиИзвестнойБуквы:РЯД 128 ИЗ Вид; всегоБукв:ЦЕЛ; (* сколько занято букв в ряду <рПризнакиИзвестнойБуквы> *) рНомераБукв:РЯД 10000H ИЗЯЧЦЕЛ;(* ряд из номеров букв в ряду <рПризнакиИзвестнойБуквы> *) (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Азбуки(знак:ЗНАК):МНОЖ; (* Принадлежность <знак> к множеству допустимых азбук: {0},{1},{2},{3},{4} *) УКАЗ ВОЗВРАТ рПризнакиИзвестнойБуквы[рНомераБукв[ВЦЕЛ(знак)]].азбуки КОН Азбуки; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Известная-(этойБуквы:ЗНАК):КЛЮЧ; (* ВКЛ, если <этойБуквы> является известной буквой *) УКАЗ ВОЗВРАТ Азбуки(этойБуквы) # {} (* не пусто *) КОН Известная; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Русская-(этойБуквы:ЗНАК):КЛЮЧ; (* ВКЛ, если <этойБуквы> является русской буквой *) УКАЗ ВОЗВРАТ русскаяАзбука В Азбуки(этойБуквы) КОН Русская; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Украинская-(этойБуквы:ЗНАК):КЛЮЧ; (* ВКЛ, если <этойБуквы> является украинской буквой *) УКАЗ ВОЗВРАТ украинскаяАзбука В Азбуки(этойБуквы) КОН Украинская; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Белорусская-(этойБуквы:ЗНАК):КЛЮЧ; (* ВКЛ, если <этойБуквы> является белорусской буквой *) УКАЗ ВОЗВРАТ белорусскаяАзбука В Азбуки(этойБуквы) КОН Белорусская; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Дореформенная-(этойБуквы:ЗНАК):КЛЮЧ; (* ВКЛ, если <этойБуквы> является русской дореформенной буквой *) УКАЗ ВОЗВРАТ дореформеннаяАзбука В Азбуки(этойБуквы) КОН Дореформенная; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Латинская-(этойБуквы:ЗНАК):КЛЮЧ; (* ВКЛ, если <этойБуквы> является латинской буквой *) УКАЗ ВОЗВРАТ латинскаяАзбука В Азбуки(этойБуквы) КОН Латинская; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Заглавная-(буква:ЗНАК):КЛЮЧ; (* ВКЛ, если <буква> является заглавной буквой *) УКАЗ ВОЗВРАТ буква = рПризнакиИзвестнойБуквы[рНомераБукв[ВЦЕЛ(буква)]].заглавная КОН Заглавная; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА ВЗаглавную-(буква:ЗНАК):ЗНАК; (* Переводит <буква> в заглавную букву *) ПЕР номер:ЦЕЛ; (* номер в ряду <рПризнакиИзвестнойБуквы> (из 128 наборов) *) УКАЗ номер:=рНомераБукв[ВЦЕЛ(буква)]; ЕСЛИ номер = 0 ТО ВОЗВРАТ буква КОН; ВОЗВРАТ рПризнакиИзвестнойБуквы[номер].заглавная КОН ВЗаглавную; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА ВСтрочную-(буква:ЗНАК):ЗНАК; (* Переводит <буква> в строчную букву *) ПЕР номер:ЦЕЛ; УКАЗ номер:=рНомераБукв[ВЦЕЛ(буква)]; ЕСЛИ номер = 0 ТО ВОЗВРАТ буква КОН; ВОЗВРАТ рПризнакиИзвестнойБуквы[номер].строчная КОН ВСтрочную; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА ДобавитьБукву(заглавнаяБуква,строчнаяБуква:ЗНАК; номерАзбуки:ЦЕЛ); ПЕР номер:ЦЕЛ; (* номер в ряду <рПризнакиИзвестнойБуквы> (из 128 наборов) *) УКАЗ номер:=1; ПОКА номер < всегоБукв ВЫП ЕСЛИ рПризнакиИзвестнойБуквы[номер].заглавная = заглавнаяБуква ТО (* такая буква уже есть в других азбуках *) рПризнакиИзвестнойБуквы[номер].азбуки:= рПризнакиИзвестнойБуквы[номер].азбуки+{номерАзбуки}; ВОЗВРАТ КОН; УВЕЛИЧИТЬ(номер) КОН; (* новая буква в ряду <рПризнакиИзвестнойБуквы> *) рПризнакиИзвестнойБуквы[номер].азбуки:={номерАзбуки}; рПризнакиИзвестнойБуквы[номер].заглавная:=заглавнаяБуква; рПризнакиИзвестнойБуквы[номер].строчная:=строчнаяБуква; рНомераБукв[ВЦЕЛ(заглавнаяБуква)]:=УЗК(УЗК(номер)); рНомераБукв[ВЦЕЛ(строчнаяБуква)]:=УЗК(УЗК(номер)); УВЕЛИЧИТЬ(всегоБукв) КОН ДобавитьБукву; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА ДобавитьАзбуку(рЗаглавные-,рСтрочные-:ЦЕПЬ; номерАзбуки:ЦЕЛ); (* Добавляет в ряд <рПризнакиИзвестнойБуквы> из <рЗаглавные> и <рСтрочные> все знаки из азбучной цепочки и <номерАзбуки> *) (* Добавляет в ряд <рНомераБукв> новый <номер>=<всегоБукв> *) ПЕР место:ЦЕЛ; (* <место> в азбучной цепочке <рЗаглавные> и <рСтрочные> *) УКАЗ ОТ место:=0 ДО РАЗМЕР(рЗаглавные)-2 ВЫП ДобавитьБукву(рЗаглавные[место],рСтрочные[место],номерАзбуки) КОН КОН ДобавитьАзбуку; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ЗАДАЧА Подготовить; (* Подготовить ряд <рПризнакиИзвестнойБуквы> *) УКАЗ (* 0-я буква - пустышка *) всегоБукв:=1; ДобавитьАзбуку(русскиеЗаглавные, русскиеСтрочные, русскаяАзбука); ДобавитьАзбуку(украинскиеЗаглавные, украинскиеСтрочные, украинскаяАзбука); ДобавитьАзбуку(белорусскиеЗаглавные, белорусскиеСтрочные, белорусскаяАзбука); ДобавитьАзбуку(дореформенныеЗаглавные,дореформенныеСтрочные,дореформеннаяАзбука); ДобавитьАзбуку(латинскиеЗаглавные, латинскиеСтрочные, латинскаяАзбука); КОН Подготовить; (*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*) УКАЗ Подготовить КОН Буква. |
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com
|
|